/*
 * 版权声明 (c) 2025 XXX科技有限公司
 *
 * 本软件及其相关文档文件受版权保护。未经版权所有者明确书面许可，任何单位或个人不得
 * 以任何形式复制、传播、修改、出售、出租、反向工程、反编译或利用本软件的任何部分。
 *
 * 对于任何违反本声明的行为，版权所有者保留追究法律责任的权利。
 */

#ifndef __UTILS_H__
#define __UTILS_H__
#include <iostream>
#include <sys/time.h>
#include "utils/header_sock.h"
#include "utils/header_global.h"

using namespace std;

// 解析IP和Port(舍弃stoi)
inline std::pair<string, int> parseIpPort(const string &ipPort) {
	std::string ip;
	int         port = 0;
	size_t      pos  = ipPort.find(":");
	if (pos != std::string::npos) {
		ip = ipPort.substr(0, pos);
		for (size_t i = pos + 1; i < ipPort.length(); ++i) {
			if (ipPort[i] >= '0' && ipPort[i] <= '9') {
				port = port * 10 + (ipPort[i] - '0');
			} else {
				port = 0;
				break;
			}
		}
	} else {
		ip = ipPort;
	}
	return make_pair(ip, port);
}

// 当前时间的毫秒戳
inline long long timestamp_mills() {
	long long timestamp;
#ifdef _WIN32
	FILETIME ft;
	GetSystemTimeAsFileTime(&ft);
	timestamp = ((static_cast<long long>(ft.dwHighDateTime) << 32) | ft.dwHighDateTime) / 10000;
#else
	struct timeval tv;
	gettimeofday(&tv, nullptr);
	timestamp = (static_cast<long long>(tv.tv_sec) * 1000) + (tv.tv_usec / 1000);
#endif
	return timestamp;
}
#endif //__UTILS_H__
